package cn.cailin.day07.demo12ReverseStream;

import java.io.*;

/*
    java.io.OutputStreamWriter extends Writer
    OutputStreamWriter: 是字符流通向字节流的桥梁: 可使用指定的charset将要写入流中的字符编码成字节。（编码:把能看懂的变成看不懂的）

    继续自父类的共性成员:
        -void write(int c)写入单个字符。
        -void write(char[] cbuf)写入字符数组.
        -abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分，off数组的开始索引，len写的字符个数
        -void write(String str)写入字符串。
        -void write(String str,int off,int len)写入字符串的某一部分，off字符开始索引，len写的字符个数。
        -void flush()刷新该流的缓冲。
        -void close()关闭此流，但要先刷新它。
    构造方法:
        OutputStreamWriter(OutputStream out)
            创建默认使用字符编码的OutputStreamWriter.
        OutputStreamWriter(OutputStream out,String charsetName)
            创建使用指定字符集的OutputStreamWriter.
        参数:
            OutputStream out :字节输出流，可以用来    写转换之后的字节到文件中
            String charsetName:指定的编码表名称，不区分大小写可以使用utf-8/GBK不指定默认utf-8

    使用步骤：
        1.创建OutputStreamWriter对象，构造方法中传递字符输出流和指定编码表名称
        2.使用OutputStreamWriter对象中的方法Writer,把字符转换为字节存储缓冲区中（编码）
        3.使用OutputStreamWriter对象中的方法flush，把内存缓冲区中的字节刷新到文件中（使用字节流写字节的过程）
        4.资源释放

 */
public class Demo02OutputStreamWriter {
    public static void main(String[] args) throws IOException {
        //write_utf_8();
        write_gbk();

    }

    private static void write_gbk() throws IOException {
        //1.创建OutputStreamWriter对象，构造方法中传递字符输出流和指定编码表名称
        OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\IDEA\\day05-code\\src\\cn\\cailin\\day07\\gbk.txt"),"gbk");
        //2.使用OutputStreamWriter对象中的方法Writer,把字符转换为字节存储缓冲区中（编码）
        osw.write("你好");
        //3.使用OutputStreamWriter对象中的方法flush，把内存缓冲区中的字节刷新到文件中（使用字节流写字节的过程）
        osw.flush();
        //4.资源释放
        osw.close();
    }

    /*
        使用转换流OutputStreamWriter写UTF-8格式的文件
     */
    private static void write_utf_8() throws IOException {
        //1.创建OutputStreamWriter对象，构造方法中传递字符输出流和指定编码表名称
        //OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\IDEA\\day05-code\\src\\cn\\cailin\\day07\\utf-8.txt"),"utf-8");
        OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\IDEA\\day05-code\\src\\cn\\cailin\\day07\\utf-8.txt"));//不指定默认使用utf-8

        //2.使用OutputStreamWriter对象中的方法Writer,把字符转换为字节存储缓冲区中（编码）
        osw.write("你好");
        //3.使用OutputStreamWriter对象中的方法flush，把内存缓冲区中的字节刷新到文件中（使用字节流写字节的过程）
        osw.flush();
        //4.资源释放
        osw.close();
    }

}
